/**
 * 知识库 API 服务
 * 
 * 提供与后端知识库系统交互的接口
 * 注意：知识库 API 使用 AI Chat API 地址，而不是系统 API
 */

import axios from 'axios'
import { AI_CHAT_API_BASE_URL } from '../utils/constants'
import { getToken } from '@/utils/auth'

// 创建专门用于知识库的 axios 实例（使用 AI Chat API 地址）
const kbApi = axios.create({
  baseURL: AI_CHAT_API_BASE_URL,
  timeout: 30000,
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器：添加 token
kbApi.interceptors.request.use(
  (config) => {
    const token = getToken()
    if (token) {
      config.headers['Authorization'] = 'Bearer ' + token
    }
    return config
  },
  (error) => {
    return Promise.reject(error)
  }
)

// 响应拦截器：处理响应
kbApi.interceptors.response.use(
  (res) => {
    // 二进制数据则直接返回
    if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
      return res.data
    }
    return res.data
  },
  (error) => {
    console.error('知识库 API 错误:', error)
    return Promise.reject(error)
  }
)

/**
 * 知识库 API 基础路径
 */
const KB_API_BASE = '/api/knowledge-base'

/**
 * 添加文档到知识库
 * 
 * @param {Array} documents - 文档列表
 * @returns {Promise}
 */
export const addDocuments = (documents) => {
  return kbApi.post(`${KB_API_BASE}/documents`, {
    documents
  })
}

/**
 * 获取文档列表
 * 
 * @param {Object} params - 查询参数
 *   - page: 页码
 *   - limit: 每页数量
 *   - type: 文档类型过滤
 *   - search: 搜索关键词
 * @returns {Promise}
 */
export const getDocuments = (params = {}) => {
  return kbApi.get(`${KB_API_BASE}/documents`, { params })
}

/**
 * 获取单个文档详情
 * 
 * @param {String} docId - 文档ID
 * @returns {Promise}
 */
export const getDocumentDetail = (docId) => {
  return kbApi.get(`${KB_API_BASE}/documents/${docId}`)
}

/**
 * 更新文档
 * 
 * @param {String} docId - 文档ID
 * @param {Object} data - 更新数据
 * @returns {Promise}
 */
export const updateDocument = (docId, data) => {
  return kbApi.put(`${KB_API_BASE}/documents/${docId}`, data)
}

/**
 * 删除文档
 * 
 * @param {String} docId - 文档ID
 * @returns {Promise}
 */
export const deleteDocument = (docId) => {
  return kbApi.delete(`${KB_API_BASE}/documents/${docId}`)
}

/**
 * 批量删除文档
 * 
 * @param {Array} docIds - 文档ID列表
 * @returns {Promise}
 */
export const deleteDocuments = (docIds) => {
  return kbApi.post(`${KB_API_BASE}/documents/batch/delete`, {
    doc_ids: docIds
  })
}

/**
 * 搜索知识库
 * 
 * @param {String} query - 查询文本
 * @param {Number} maxResults - 最大结果数
 * @returns {Promise}
 */
export const searchKnowledgeBase = (query, maxResults = 5) => {
  return kbApi.post(`${KB_API_BASE}/search`, {
    query,
    max_results: maxResults
  })
}

/**
 * 获取知识库统计信息
 * 
 * @returns {Promise}
 */
export const getKnowledgeBaseStats = () => {
  return kbApi.get(`${KB_API_BASE}/stats`)
}

/**
 * 上传文件
 * 
 * @param {FormData} formData - 包含文件的 FormData
 * @returns {Promise}
 */
export const uploadFile = (formData) => {
  return kbApi.post(`${KB_API_BASE}/upload`, formData, {
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

/**
 * 批量导入文档
 * 
 * @param {FormData} formData - 包含导入文件的 FormData
 * @returns {Promise}
 */
export const importDocuments = (formData) => {
  return kbApi.post(`${KB_API_BASE}/import`, formData, {
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

/**
 * 导出知识库
 * 
 * @returns {Promise}
 */
export const exportKnowledgeBase = () => {
  return kbApi.get(`${KB_API_BASE}/export`, {
    responseType: 'blob'
  })
}

/**
 * 获取文档类型列表
 * 
 * @returns {Promise}
 */
export const getDocumentTypes = () => {
  return Promise.resolve({
    data: [
      { value: 'workorder', label: '工单', icon: 'Document' },
      { value: 'fault_analysis', label: '故障分析', icon: 'Warning' },
      { value: 'equipment_manual', label: '设备说明书', icon: 'Book' },
      { value: 'other', label: '其他', icon: 'Files' }
    ]
  })
}

export default {
  addDocuments,
  getDocuments,
  getDocumentDetail,
  updateDocument,
  deleteDocument,
  deleteDocuments,
  searchKnowledgeBase,
  getKnowledgeBaseStats,
  uploadFile,
  importDocuments,
  exportKnowledgeBase,
  getDocumentTypes
}

